/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import controller.Cliente;
import controller.Conexao;
import controller.ContaPagar;
import controller.contaReceber;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import view.contasReceber;

/**
 *
 * @author Alcivando
 */
public class contasReceberDAO {

    contasReceber cReceber = new contasReceber();
    private Connection connection;

    public contasReceberDAO() throws SQLException {
        this.connection = Conexao.getConnection();


    }

    public void adiciona(contaReceber contaReceber) throws Exception {

        // cria uma lista onde será armazenado o próximo codigo
        ArrayList<Integer> codigo = new ArrayList<Integer>();
        // cria um parametro com a consulta para pegar o proximo codigo a ser usado
        String consultaId = "SELECT max(\"codContaReceber\") from \"contasReceber\";";
        // efetua e retorna a consultaId
        ResultSet rs = connection.createStatement().executeQuery(consultaId);
        //adiciona o codigo a lista
        while (rs.next()) {
            codigo.add(rs.getInt("max") + 1);
        }
        //adiciona o codigo ao proximo cliente a ser inserido
        contaReceber.setCodVenda(codigo.get(0));

        // insere os dados do cliente com a conexao para o banco de dados.
        String sql = "insert into \"contasReceber\" values (?,?)";
        PreparedStatement stmt = connection.prepareStatement(sql);

        stmt.setInt(1, contaReceber.getCodConta());
        stmt.setInt(2, contaReceber.getCodVenda());
        // busca os campos preenchidos na classe de Clientes.

        stmt.execute();
        stmt.close();
        // executa e finaliza o processo de adicionar.*/
    }

    public void remover(ContaPagar conta) throws Exception {
        PreparedStatement comando;
        try {
            String sql = "DELETE FROM contasPagar WHERE \"codConta\"=?";
            comando = connection.prepareStatement(sql);
            comando.setInt(1, conta.getCodConta());
            comando.execute();
            JOptionPane.showMessageDialog(null, "Removido com sucesso!", "Remorção Concluído", 1);
            comando.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public ArrayList<contaReceber> retornaTodasContas() {
        Statement comando;
        ArrayList<contaReceber> listaContas = new ArrayList<contaReceber>();

        try {

            String sql = "SELECT * FROM contasReceber";
            comando = connection.createStatement();
            ResultSet rs = comando.executeQuery(sql);

            while (rs.next()) {

                contaReceber conta1 = new contaReceber();

                conta1.setCodVenda(rs.getInt("\"codVenda\""));
                conta1.setCodConta(rs.getInt("\"codConta\""));

                listaContas.add(conta1);


            }
            comando.close();

            return listaContas;

        } catch (Exception ex) {
            return null;
        }
    }

    public Double pagarDescontar(Cliente cliente, Double valorPago, Double valorTotal) {
        PreparedStatement comando;

        try {
            
            if(valorPago > valorTotal){
                Double valorTroco = valorPago-valorTotal;
                Double valorParaDescontar = valorPago - valorTroco;

                String sql = "update clientes set \"valorConta\" = \"valorConta\" - ?  where \"codCliente\" = ?;";
                comando = connection.prepareStatement(sql);

                comando.setDouble(1, valorParaDescontar);
                comando.setInt(2, cliente.getCodCliente());

                comando.execute();

                comando.close();

                return valorTroco;
            }

            if (valorPago <= valorTotal) {
                String sql = "update clientes set \"valorConta\" = \"valorConta\" - ?  where \"codCliente\" = ?;";
                comando = connection.prepareStatement(sql);

                comando.setDouble(1, valorPago);
                comando.setInt(2, cliente.getCodCliente());

                comando.execute();

                comando.close();
            }


            return null;

        } catch (Exception ex) {
            return null;
        }
    }
}
